<!--
 Copyright 2023 Google LLC

 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
 You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.
-->

<!-- TODO: Avoid boilerplate. -->
<div class="blog-listing">
  <div>
    <a class="blog-title" href="testing.html">Lower Test Toil With Better Local Testing</a>
    <span class="blog-date">February 16, 2024</span>
  </div>
  <div class="blog-author">Michael Whittaker</div>
  <div>How to catch more bugs, faster.</div>
</div>

<div class="blog-listing">
  <div>
    <a class="blog-title" href="improve_cloud_efficiency.html">Improve Cloud Efficiency with Service Weaver</a>
    <span class="blog-date">February 8, 2024</span>
  </div>
  <div class="blog-author">Shane Ouchi</div>
  <div>Why organizations can look to Service Weaver to improve cloud application efficiency.</div>
</div>

<div class="blog-listing">
  <div>
    <a class="blog-title" href="kubernetes.html">Service Weaver and Kubernetes</a>
    <span class="blog-date">November 9, 2023</span>
  </div>
  <div class="blog-author">Robert Grandl</div>
  <div>Quick summary on how to deploy Service Weaver applications on Kubernetes.</div>
</div>

<div class="blog-listing">
  <div>
    <a class="blog-title" href="history.html">A History of Service Weaver's Core API</a>
    <span class="blog-date">August 16, 2023</span>
  </div>
  <div class="blog-author">Sanjay Ghemawat, Michael Whittaker</div>
  <div>A summary of all the changes we made to Service Weaver's core API over the last two years.</div>
</div>

<div class="blog-listing">
  <div>
    <a class="blog-title" href="weaver_generate.html">Using Advanced Go Features to Detect Stale Code</a>
    <span class="blog-date">August 9, 2023</span>
  </div>
  <div class="blog-author">Michael Whittaker</div>
  <div>A deep dive on the advanced, and sometimes esoteric, ways we use Go to detect when you forget to run <code>weaver generate</code>.</div>
</div>

<div class="blog-listing">
  <div>
    <a class="blog-title" href="metric_labels.html">Strongly Typed Metric Labels Using Generics in Go</a>
    <span class="blog-date">August 1, 2023</span>
  </div>
  <div class="blog-author">Michael Whittaker</div>
  <div>An exploration of how Service Weaver's metrics API uses generics to implement strongly typed labels.</div>
</div>

<div class="blog-listing">
  <div>
    <a class="blog-title" href="vision.html">Monolith or Microservices or Both</a>
    <span class="blog-date">May 16, 2023</span>
  </div>
  <div class="blog-author">Robert Grandl</div>
  <div>Vision paper on monolith vs. microservices</div>
</div>

<div class="blog-listing">
  <div>
    <a class="blog-title" href="corba.html">CORBA vs. the Fallacies of Distributed Computing</a>
    <span class="blog-date">April 17, 2023</span>
  </div>
  <div class="blog-author">Michael Whittaker</div>
  <div>Is Service Weaver doomed to failure, just like CORBA?</div>
</div>

<div class="blog-listing">
  <div>
    <a class="blog-title" href="deployers.html">How to Implement a Service Weaver Deployer</a>
    <span class="blog-date">April 5, 2023</span>
  </div>
  <div class="blog-author">Michael Whittaker</div>
  <div>A tutorial on how Service Weaver deployers work and how to implement one from scratch</div>
</div>

<div class="blog-listing">
  <div>
    <a class="blog-title" href="quick_intro.html">A Quick Introduction to Service Weaver</a>
    <span class="blog-date">March 1, 2023</span>
  </div>
  <div class="blog-author">Robert Grandl</div>
  <div>A Quick Introduction to Service Weaver</div>
</div>
